package OOA.com.JavaBasis.outinerclass;
/*
*
* 内部类分两种：成员内部类和局部内部类
* 成员内部类是与成员方法同级的
* 局部内部类是在成员方法中的
*
*
* 成员内部类的两种访问方法：
*   1.间接访问
*       通过外部类的成员方法，来间接的访问内部类，该方法中含有内部类的的对象
*   2.直接访问
*       直接在main方法中创建内部类的对象，有两种格式
*       1）外部类名.内部类名   变量名 = new外部类().new内部类()
*       2）内部类名   变量名 = new外部类().new内部类()
*
*解决内部类和外部类变量名冲突问题：
* 当内部类和外部类变量名相同时，内部类可以通过以下格式调用外部类的变量：
*                                                       格式：外部类名.this.变量名
*
* */
public class OutClass {//外部类
    String info = "这是外部类";

    //间接方法
    public void show(){//外部类的成员方法
        //创建内部类的对象
        InnerClass innerClass = new InnerClass();
        //通过内部类对象调用内部类的show（）方法
        innerClass.show();

        System.out.println(this.info);
    }


    public class InnerClass{//内部类【成员类】
        String info = "这是内部类";
        public void show(){
            System.out.println(this.info);
            System.out.println(OutClass.this.info);
        }
    }

    public static void main(String[] args) {
        //直接方法
        OutClass.InnerClass innerClass = new OutClass().new InnerClass();
        innerClass.show();//内部类的show方法
        System.out.println("===================");
        //间接方法
        OutClass outClass = new OutClass();
        outClass.show();//外部类的show方法
    }
}
